package com.ghck.shop.service;

import java.util.List;

import com.ghck.shop.model.Category;
import com.ghck.shop.model.CommentLabel;
import com.ghck.shop.model.GoodCollect;
import com.ghck.shop.model.GoodHotSearch;
import com.ghck.shop.model.GoodsImage;
import com.ghck.shop.model.GoodsSortConfig;
import com.ghck.shop.model.GoodsSpecification;
import com.ghck.shop.model.Page;
import com.ghck.shop.model.PostageConfig;
import com.ghck.shop.model.SystemCity;
import com.ghck.shop.model.UserArea;
import com.ghck.shop.model.request.GoodAddReq;
import com.ghck.shop.model.request.GoodsCommentReq;
import com.ghck.shop.model.request.GoodsReq;
import com.ghck.shop.model.response.CategoryRes;
import com.ghck.shop.model.response.GoodCollectRes;
import com.ghck.shop.model.response.GoodsCommentRes;
import com.ghck.shop.model.response.GoodsRes;
import com.ghck.shop.model.response.MarketingActivityRes;


/** 
 * @author 作者 : chenxuan
 * @version 创建时间：2015年12月29日 下午4:13:46 
 * 类说明 
 */
public interface GoodsService {
	/**
	 * 分类设为商家可用
	 * @param id
	 * @return
	 */
	public Integer updateCategoryShopUse(Integer id);
	/**
	 * 分类设为商家不可用
	 * @param id
	 * @return
	 */
	public Integer cancelCategoryShopUse(Integer id);
	
	
	/**
	 * 减库存
	 * @param goodsId
	 * @param num
	 */
	public void subtractStock(Integer goodsId,Integer num);

	/**
	 * 增加库存
	 * @param goodsId
	 * @param num
	 */
	public void increaseStock(Integer goodsId,Integer num);
	
	/**
	 * 评价商品
	 * @param orderCommentReq
	 * @return
	 */
	public GoodsCommentReq addGoodsComment(GoodsCommentReq goodsCommentReq);
	
	/**
	 * 首页商品列表
	 * @param goodReq
	 * @return
	 */
	public List<CategoryRes> getHomeList(GoodsReq goodReq);
	/**
	 * 首页Banner列表
	 * @param goodReq
	 * @return
	 */
	public List<CategoryRes> getBannerList(GoodsReq goodReq);
	/**
	 * 商品详情
	 * @param goodReq
	 * @return
	 */
	public GoodsRes goodsDetail(GoodsReq goodReq);
	
	/**
	 * 商品详情
	 * @param goodReq
	 * @return
	 */
	public GoodsRes goodsDetailById(Integer goodsId);
	
	/**
	 * 获取所有地区信息
	 * @return
	 */
	public List<SystemCity> getAllRegion();
	/**
	 * 商品分类列表
	 * @return
	 */
	public List<Category> categoryList();
	/**
	 * 商品排序列表
	 * @return
	 */
	public List<GoodsSortConfig> sortList();
	/**
	 * 商品列表
	 * @param goodsReq
	 * @return
	 */
	public List<GoodsRes> goodsList(GoodsReq goodsReq);
	/**
	 * 活动商品列表
	 * @param goodsReq
	 * @return
	 */
	public MarketingActivityRes marketingActivityGoodsList(GoodsReq goodsReq);
	
	
	/**
	 * 活动商品列表
	 * @param goodsReq
	 * @return
	 */
	public MarketingActivityRes marketingActivityGoodsList(Integer type,Integer start,Integer limit);
	
	/**
	 * 评论 标签 列表
	 * @return
	 */
	public List<CommentLabel> commentLabelList();
	
	/**
	 * 商品评价列表
	 * @param orderCommentReq
	 * @return
	 */
	public List<GoodsCommentRes> goodsCommentList(GoodsCommentReq goodsCommentReq);
	/**
	 * 获取邮费
	 * @param provinceId
	 * @return
	 */
	public PostageConfig getPostageConfigByProvinceId(Integer provinceId);
	/**
	 * 管理平台商品列表
	 * @param goodsReq
	 * @return
	 */
	public List<GoodsRes> managerList(GoodsReq goodsReq);
	
	public List<GoodsRes> managerListPage(GoodsReq goodsReq);
	
	public Integer countManagerList(GoodsReq goodsReq);
	
	/**
	 * 查找商品
	 * @param goodsReq
	 * @return
	 */
	public List<GoodsRes> findGoods(GoodsReq goodsReq);
	
	
	public List<Category> categoryListLevel();
	/**
	 * 添加商品
	 * @param goodAddReq
	 */
	public GoodAddReq addGood(GoodAddReq goodAddReq);
	
	/**
	 * 修改商品
	 * @param goodAddReq
	 */
	public void updateGood(GoodAddReq goodAddReq);
	/**
	 * 删除商品规格
	 * @param id
	 * @return
	 */
	public Integer deleteGoodsSpecification(Integer id);
	/**
	 * 添加规格
	 * @param goodsSpecification
	 * @return
	 */
	public Integer addGoodsSpecification(GoodsSpecification goodsSpecification);
	/**
	 * 修改规格
	 * @param goodsSpecification
	 * @return
	 */
	public Integer updateGoodsSpecification(GoodsSpecification goodsSpecification);
	/**
	 * 删除商品图片
	 * @param imageId
	 * @return
	 */
	public Integer deleteGoodImage(Integer imageId);
	/**
	 * 添加商品图片
	 * @param imageId
	 * @return
	 */
	public Integer addGoodImage(List<GoodsImage> list);
	/**
	 * 供应商拉取我的商品列表
	 * @param supplierId
	 * @param isOnsale
	 * @return
	 */
	public List<GoodsRes> findGoodsBySupplierId(Integer supplierId,Integer isOnsale,Integer start,Integer limit);
	
	/**
	 * 删除商品
	 * @param supplierId
	 * @param goodId
	 */
	public void deleteGood(Integer supplierId,Integer goodId);
	
	/**
	 * 提交审核商品
	 * @param supplierId
	 * @param goodId
	 */
	public void revieweGood(Integer supplierId,Integer goodId);
	/**
	 * 取消提交审核商品
	 * @param supplierId
	 * @param goodId
	 */
	public void cancelRevieweGood(Integer supplierId,Integer goodId);
	/**
	 * 上架商品
	 * @param supplierId
	 * @param goodId
	 */
	public void shelvesGood(Integer supplierId,Integer goodId);
	/**
	 * 下架商品
	 * @param supplierId
	 * @param goodId
	 */
	public void xiajiaGood(Integer supplierId,Integer goodId);
	
	/**
	 * 上架商品
	 * @param supplierId
	 * @param goodId
	 */
	public void shelvesGoodAdmin(Integer goodId);
	/**
	 * 下架商品
	 * @param supplierId
	 * @param goodId
	 */
	public void xiajiaGoodAdmin(Integer goodId);
	/**
	 * 添加收藏
	 * @param goodCollect
	 * @return
	 */
	public Integer addGoodCollect(GoodCollect goodCollect);
	/**
	 * 我的收藏
	 * @param userId
	 * @param start
	 * @param limit
	 * @return
	 */
	public List<GoodCollectRes> myGoodCollects(GoodsReq goodsReq);
	/**
	 * 删除收藏
	 * @param id
	 */
	public void deleteGoodCollect(Integer id);
	
	
	public UserArea findUserAreaByUserId(Integer userId);
	/**
	 * 审核通过
	 * @param goodId
	 */
	public void reviewSuccGoodAdmin(Integer goodId) ;
	/**
	 * 审核失败
	 * @param goodId
	 */
	public void reviewFailGoodAdmin(Integer goodId) ;
	/**
	 * 商品热搜关键字
	 * @return
	 */
	public List<GoodHotSearch> allGoodHotSearchs();
	/**
	 * 系统管理员可以操作的分类
	 * @return
	 */
	public List<Category> categoryList4Good();
	
	/**
	 * 商家可以操作的分类
	 * @return
	 */
	public List<Category> categoryList4ShopGood();
	
	public void deleteGoodAdmin( Integer goodId) ;
	/**
	 * 添加分类
	 * @param category
	 * @return
	 */
	public Integer saveCategory(Category category);
	
	public Integer addFirstHomeComment(Integer categoryId);
	public Integer cancelFirstHomeComment(Integer categoryId);
	public Integer addHotSell(Integer categoryId);
	public Integer cancelHotSell(Integer categoryId);
	
	public Integer addHomeBanner(Integer categoryId,String path);
	
	public Integer cancelHomeBanner(Integer categoryId);
	
	public void addMarketingActivity(Integer goodsId,Integer marketingActivityId);
	public void deleteMarketingActivity(Integer goodsId,Integer marketingActivityId);

}
